package typeinfo;

import typeinfo.interfacea.A;

class InnerA {
	private static class C implements A {
		public void f() {
			System.out.println("public C.f()");
		}

		@SuppressWarnings("unused")
		public void g() {
			System.out.println("public C.g()");
		}

		@SuppressWarnings("unused")
		void u() {
			System.out.println("package C.u()");
		}

		@SuppressWarnings("unused")
		protected void v() {
			System.out.println("protected C.v()");
		}

		@SuppressWarnings("unused")
		private void w() {
			System.out.println("private C.w()");
		}
	}

	public static A makeA() {
		return new C();
	}
}

public class InnerImplementation {
	public static void main(String[] args) throws Exception {
		A a = InnerA.makeA();
		a.f();
		System.out.println(a.getClass().getName());
		HiddenImplementation.callHiddenMethod(a, "g");
		HiddenImplementation.callHiddenMethod(a, "u");
		HiddenImplementation.callHiddenMethod(a, "v");
		HiddenImplementation.callHiddenMethod(a, "w");
	}
}
